package br.com.tcf.entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Promocao implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private int id_promocao;
	@Column
	private String nm_promocao;
	@Column
	private Date data_inicial;
	@Column
	private Date data_final;
	@Column 
	private Boolean sn_combo = false;	
	@Column
	private Double vl_promocao;

	@ManyToOne
	@JoinColumn(name="id_empresa")
	private Empresa empresa;

	@OneToMany(mappedBy="promocao", targetEntity=ProdutoDetalhePromocao.class, cascade=javax.persistence.CascadeType.ALL)
	private List<ProdutoDetalhePromocao> produtoDetalhePromocao = new ArrayList<ProdutoDetalhePromocao>();

	@Column
	private Boolean dia_especifico = false;

	@ManyToMany
	@JoinTable(name="PromocaoDiaSemana", joinColumns=
{@JoinColumn(name="id_promocao")}, inverseJoinColumns={@JoinColumn(name="id_dia_semana")})
	private List<DiaSemana> diaSemana = new ArrayList<DiaSemana>();

	public int getId_promocao() {
		return id_promocao;
	}
	public void setId_promocao(int id_promocao) {
		this.id_promocao = id_promocao;
	}
	public String getNm_promocao() {
		return nm_promocao;
	}
	public void setNm_promocao(String nm_promocao) {
		this.nm_promocao = nm_promocao;
	}
	public Date getData_inicial() {
		return data_inicial;
	}
	public void setData_inicial(Date data_inicial) {
		this.data_inicial = data_inicial;
	}
	public Date getData_final() {
		return data_final;
	}
	public void setData_final(Date data_final) {
		this.data_final = data_final;
	}
	public boolean getSn_combo() {
		return sn_combo;
	}
	public void setSn_combo(boolean sn_combo) {
		this.sn_combo = sn_combo;
	}
	public Double getVl_promocao() {
		return vl_promocao;
	}
	public List<ProdutoDetalhePromocao> getProdutoDetalhePromocao() {
		return produtoDetalhePromocao;
	}
	public void setProdutoDetalhePromocao(List<ProdutoDetalhePromocao> produtoDetalhePromocao) {
		this.produtoDetalhePromocao = produtoDetalhePromocao;
	}
	public void setVl_promocao(Double vl_promocao) {
		this.vl_promocao = vl_promocao;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public Boolean getDia_especifico() {
		return dia_especifico;
	}
	public void setDia_especifico(Boolean dia_especifico) {
		this.dia_especifico = dia_especifico;
	}
	public List<DiaSemana> getDiasSemana() {
		return diaSemana;
	}
	public void setDiasSemana(List<DiaSemana> diaSemana) {
		this.diaSemana = diaSemana;
	}	

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + id_promocao;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof Promocao)) {
			return false;
		}
		Promocao other = (Promocao) obj;
		if (id_promocao != other.id_promocao) {
			return false;
		}
		return true;
	}	
	@Override
	public String toString() {
		return this.nm_promocao;
	}
}
